package com.home.zqt.platform.configure;

import org.beetl.sql.core.*;
import org.beetl.sql.core.db.DBStyle;
import org.beetl.sql.ext.DebugInterceptor;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import javax.sql.DataSource;

/**
 * @author soon
 */
@Configuration
public class SqlManagerConfig {

    private DBStyle getDbStyle(String className) throws Exception {
        return (DBStyle) Class.forName(className).newInstance();
    }

    private NameConversion getNameConversion(String className) throws Exception {
        return (NameConversion) Class.forName(className).newInstance();
    }

    @Bean(name = "sqlManagerProduct")
    public SQLManager sqlManagerProduct(@Qualifier("productDs") DataSource ds, Environment env) throws Exception {
        // sql语句放在classpagth的/sql 目录下
        // 数据库命名跟java命名一样，所以采用DefaultNameConversion，还有一个是UnderlinedNameConversion，下划线风格的，
        // 最后，创建一个SQLManager,DebugInterceptor 不是必须的，但可以通过它查看sql执行情况
        SQLManager sqlManager = new SQLManager(
                this.getDbStyle(env.getProperty("beetlsql.ds.product.dbStyle")),
                new ClasspathLoader(env.getProperty("beetlsql.ds.product.sqlPath")),
                ConnectionSourceHelper.getSingle(ds),
                this.getNameConversion(env.getProperty("beetlsql.ds.product.nameConversion")),
                new Interceptor[]{new DebugInterceptor()}
        );
        return sqlManager;
    }

    @Bean(name = "sqlManagerPrepare")
    public SQLManager sqlManagerPrepare(@Qualifier("prepareDs") DataSource ds, Environment env) throws Exception {
        // sql语句放在classpagth的/sql 目录下
        // 数据库命名跟java命名一样，所以采用DefaultNameConversion，还有一个是UnderlinedNameConversion，下划线风格的，
        // 最后，创建一个SQLManager,DebugInterceptor 不是必须的，但可以通过它查看sql执行情况
        return new SQLManager(
                this.getDbStyle(env.getProperty("beetlsql.ds.prepare.dbStyle")),
                new ClasspathLoader(env.getProperty("beetlsql.ds.prepare.sqlPath")),
                ConnectionSourceHelper.getSingle(ds),
                this.getNameConversion(env.getProperty("beetlsql.ds.prepare.nameConversion")),
                new Interceptor[]{new DebugInterceptor()}
        );
    }

    @Bean(name = "sqlManagerDaily")
    public SQLManager sqlManagerDaily(@Qualifier("dailyDs") DataSource ds, Environment env) throws Exception {
        // sql语句放在classpagth的/sql 目录下
        // 数据库命名跟java命名一样，所以采用DefaultNameConversion，还有一个是UnderlinedNameConversion，下划线风格的，
        // 最后，创建一个SQLManager,DebugInterceptor 不是必须的，但可以通过它查看sql执行情况
        return new SQLManager(
                this.getDbStyle(env.getProperty("beetlsql.ds.daily.dbStyle")),
                new ClasspathLoader(env.getProperty("beetlsql.ds.daily.sqlPath")),
                ConnectionSourceHelper.getSingle(ds),
                this.getNameConversion(env.getProperty("beetlsql.ds.daily.nameConversion")),
                new Interceptor[]{new DebugInterceptor()}
        );
    }

}
